home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / TURB_VIS / TCYBER25 / CYANI.ZIP / PCXSNP.PAS < prev    next >
Pascal/Delphi Source File  |  1994-10-20  |  8KB  |  78 lines

  1. {
  2. Turbo Vision CyberTools 2.5
  3. (C) 1994 Steve Goldsmith
  4. All Rights Reserved
  5. }
  6.  
  7. UNIT PCXSNP ;{$I APP.INC} {$X+} INTERFACE USES DOS , OBJECTS , DRIVERS , VIEWS , DIALOGS , APP , MSGBOX ,
  8. {$IFDEF UseDLL} CYBERAPI , {$ELSE} VGA , {$ENDIF} PCX , SNIP , TVSTR ;TYPE PPCXSNP =^TPCXSNP ;
  9. TPCXSNP =OBJECT (TDIALOG)COMPAREFLAG :BOOLEAN ;CONVSEQ , SNIPXSIZE , SNIPYSIZE , FRAMESIZE , TOTALFRAMES , FRAMECNT ,
  10. FRAMEDELAY , FRAMETABLEELE :WORD ;FRAMEFILEPOS :LONGINT ;DELAYSTR :STRING [ 9 ] ;SNIPNAME :PATHSTR ;
  11. FILELISTCOLL :PSTRINGCOLLECTION ;PCXDECODE1 :TDECODEPCXFILE256 ;PCXDECODE2 :TDECODEPCXFILE256 ;
  12. SNIPENCODE :TWRITESNPFILE ;INFOLINE :PINPUTLINE ;DELAYLINE :PINPUTLINE ;DELAYBAR :PSCROLLBAR ;CONSTRUCTOR INIT
  13. (FL :PSTRINGCOLLECTION );PROCEDURE UPDATEINFO (MSG :STRING );PROCEDURE UPDATEDELAY ;PROCEDURE SCANFIRST ;
  14. PROCEDURE SCANNEXT ;PROCEDURE CREATESNIP ;PROCEDURE COMPAREFRAMES (OLDFRAME ,NEWFRAME:VGADATABUFPTR );
  15. PROCEDURE DONECONVERT ;PROCEDURE CONVERTFRAME ;PROCEDURE GETEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE HANDLEEVENT
  16. (VAR EVENT:TEVENT);VIRTUAL;END;CONST SNPWAIT=0;SNPSCANFIRST=1;SNPSCANNEXT=2;SNPCREATESNIP=3;SNPCONVERT=4;SNPDONE =5;
  17. IMPLEMENTATION CONSTRUCTOR TPCXSNP.INIT (FL:PSTRINGCOLLECTION);VAR OO1I:TRECT;BEGIN OO1I.ASSIGN (0 , 0 , 65 , 8 );
  18. INHERITED INIT(OO1I , 'Make Snip');OPTIONS := OPTIONS OR OFCENTERX OR OFCENTERY ;GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X +
  19. 2 ;OO1I.B.X := OO1I.B.X - 2 ;OO1I.A.Y := OO1I.A.Y + 2 ;OO1I.B.Y := OO1I.A.Y + 1 ;INFOLINE := NEW (PINPUTLINE , INIT (OO1I
  20. , 127 ));INFOLINE ^. OPTIONS := INFOLINE ^. OPTIONS AND NOT OFSELECTABLE ;INSERT (INFOLINE );GETEXTENT (OO1I );OO1I.A.X
  21. := OO1I.A.X + 2 ;OO1I.B.X := OO1I.A.X + 20 ;OO1I.A.Y := OO1I.A.Y + 5 ;OO1I.B.Y := OO1I.A.Y + 1 ;DELAYBAR := NEW
  22. (PSCROLLBAR , INIT (OO1I ));FRAMEDELAY := 1 ;DELAYBAR ^. SETPARAMS (1 , 1 , 1080 , 18 , 1 );DELAYBAR ^. OPTIONS :=
  23. DELAYBAR ^. OPTIONS OR OFSELECTABLE ;INSERT (DELAYBAR );GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X + 1 ;OO1I.B.X := OO1I.A.X
  24. + 6 ;OO1I.A.Y := OO1I.A.Y + 4 ;OO1I.B.Y := OO1I.A.Y + 1 ;INSERT (NEW (PLABEL , INIT (OO1I , '~D~elay', DELAYBAR )));
  25. GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X + 24 ;OO1I.B.X := OO1I.A.X + 11 ;OO1I.A.Y := OO1I.A.Y + 5 ;OO1I.B.Y := OO1I.A.Y +
  26. 1 ;DELAYLINE := NEW (PINPUTLINE , INIT (OO1I , 127 ));DELAYLINE ^. OPTIONS := DELAYLINE ^. OPTIONS AND NOT OFSELECTABLE ;
  27. INSERT (DELAYLINE );GETEXTENT (OO1I );OO1I.A.X := OO1I.B.X - 24 ;OO1I.B.X := OO1I.A.X + 10 ;OO1I.A.Y := OO1I.B.Y - 3 ;
  28. OO1I.B.Y := OO1I.A.Y + 2 ;INSERT (NEW (PBUTTON , INIT (OO1I , '~C~ancel', CMCANCEL , BFNORMAL )));OO1I.A.X := OO1I.B.X +
  29. 2 ;OO1I.B.X := OO1I.A.X + 10 ;INSERT (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));UPDATEINFO
  30. ('Set delay, press OK to process current directory.');FILELISTCOLL := FL ;UPDATEDELAY ;CONVSEQ := SNPWAIT ;COMPAREFLAG :=
  31. TRUE END ;PROCEDURE TPCXSNP.UPDATEINFO (MSG:STRING );BEGIN INFOLINE ^. SETDATA (MSG )END ;PROCEDURE TPCXSNP.UPDATEDELAY ;
  32. BEGIN DELAYSTR := INTTORIGHTSTR (FRAMEDELAY , 5 )+ '/18';DELAYLINE ^. SETDATA (DELAYSTR )END ;
  33. PROCEDURE TPCXSNP.SCANFIRST ;BEGIN UPDATEINFO ('Scanning '+ GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT (0 ))^));
  34. DELAYBAR ^. OPTIONS := DELAYBAR ^. OPTIONS AND NOT OFSELECTABLE ;DELAYBAR ^. SETSTATE (SFDISABLED , TRUE );IF DELAYBAR ^.
  35. GETSTATE (SFSELECTED )THEN SELECTNEXT (TRUE );TOTALFRAMES := FILELISTCOLL ^. COUNT ;FRAMECNT := 1 ;PCXDECODE1.INIT
  36. (PSTRING (FILELISTCOLL ^. AT (0 ))^);IF PCXDECODE1.READERROR =0 THEN BEGIN WITH PCXDECODE1 DO BEGIN SNIPXSIZE :=
  37. HEADER.XMAX - HEADER.XMIN + 1 ;SNIPYSIZE := HEADER.YMAX - HEADER.YMIN + 1 ;DECODEFILE END ;FRAMESIZE := SNIPXSIZE *
  38. SNIPYSIZE ;CONVSEQ := SNPSCANNEXT END ELSE BEGIN CONVSEQ := SNPDONE ;MESSAGEBOX (PSTRING (FILELISTCOLL ^. AT (0 ))^+
  39. ' is not in expected format.', NIL , MFERROR + MFOKBUTTON );UPDATEINFO ('Processing terminated.')END ;PCXDECODE1.DONE END
  40. ;PROCEDURE TPCXSNP.SCANNEXT ;BEGIN IF FRAMECNT < FILELISTCOLL ^. COUNT THEN BEGIN UPDATEINFO ('Scanning '+ GETFILENAMESTR
  41. (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^));PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^);IF
  42. PCXDECODE1.READERROR =0 THEN BEGIN PCXDECODE1.DECODEFILE ;IF (PCXDECODE1.HEADER.XMAX - PCXDECODE1.HEADER.XMIN + 1 <>
  43. SNIPXSIZE )OR (PCXDECODE1.HEADER.YMAX - PCXDECODE1.HEADER.YMIN + 1 <> SNIPYSIZE )THEN BEGIN CONVSEQ := SNPDONE ;
  44. MESSAGEBOX (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^+ ' not correct size.', NIL , MFERROR + MFOKBUTTON );UPDATEINFO
  45. ('Processing terminated.')END END ELSE BEGIN CONVSEQ := SNPDONE ;MESSAGEBOX ('PCX decode error scanning '+ PSTRING
  46. (FILELISTCOLL ^. AT (FRAMECNT ))^, NIL , MFERROR + MFOKBUTTON );UPDATEINFO ('Processing terminated.')END ;
  47. PCXDECODE1.DONE ;INC (FRAMECNT )END ELSE CONVSEQ := SNPCREATESNIP END ;PROCEDURE TPCXSNP.CREATESNIP ;BEGIN SNIPNAME :=
  48. ADDEXTSTR (PSTRING (FILELISTCOLL ^. AT (0 ))^, 'SNP');UPDATEINFO ('Adding '+ GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT
  49. (0 ))^));PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (0 ))^);IF PCXDECODE1.READERROR =0 THEN BEGIN PCXDECODE1.DECODEFILE
  50. ;PCXDECODE1.PALETTE256TO64 ;SNIPENCODE.INIT (SNIPNAME , TOTALFRAMES , PCXDECODE1.XSIZE , PCXDECODE1.YSIZE , FRAMEDELAY );
  51. SNIPENCODE.WRITEPAL256 (@ PCXDECODE1.READPALETTE );SNIPENCODE.WRITEFRAMETABLE ;SNIPENCODE.WRITEFIRSTFRAME
  52. (PCXDECODE1.DECODEBUFPTR );SNIPENCODE.WRITEFRAMEBYTE (0 );FRAMEFILEPOS := SIZEOF (SNIPENCODE.HEADER )+ SIZEOF (VGAPALETTE
  53. )+ (TOTALFRAMES + 1 )* SIZEOF (LONGINT );SNIPENCODE.FRAMETABLEPTR ^[ 0 ] := FRAMEFILEPOS ;FRAMETABLEELE := 1 ;
  54. FRAMEFILEPOS := FRAMEFILEPOS + PCXDECODE1.XSIZE * PCXDECODE1.YSIZE + 1 ;FRAMECNT := 1 ;CONVSEQ := SNPCONVERT END ELSE
  55. BEGIN PCXDECODE1.DONE ;CONVSEQ := SNPDONE ;UPDATEINFO ('Processing terminated.')END END ;PROCEDURE TPCXSNP.COMPAREFRAMES
  56. (OLDFRAME,NEWFRAME:VGADATABUFPTR);VAR OOIO1l11II1I:BYTE;OOIOI0I011l0,O101l00l1OllI:WORD;BEGIN OOIO1l11II1I := 0 ;
  57. OOIOI0I011l0 := 0 ;SNIPENCODE.FRAMETABLEPTR ^[ FRAMETABLEELE ] := FRAMEFILEPOS ;INC (FRAMETABLEELE );O101l00l1OllI :=
  58. FRAMESIZE - 1 ;FOR OOIOI0I011l0 := 0 TO O101l00l1OllI  DO BEGIN IF OLDFRAME ^[ OOIOI0I011l0 ] =NEWFRAME ^[ OOIOI0I011l0 ]
  59. THEN BEGIN INC (OOIO1l11II1I );IF OOIO1l11II1I =63 THEN BEGIN SNIPENCODE.WRITEFRAMEBYTE (OOIO1l11II1I );INC (FRAMEFILEPOS
  60. );OOIO1l11II1I := 0 END END ELSE BEGIN IF OOIO1l11II1I > 0 THEN BEGIN SNIPENCODE.WRITEFRAMEBYTE (OOIO1l11II1I );INC
  61. (FRAMEFILEPOS );OOIO1l11II1I := 0 END ;SNIPENCODE.WRITEFRAMEBYTE (NEWFRAME ^[ OOIOI0I011l0 ] );INC (FRAMEFILEPOS )END END
  62. ;SNIPENCODE.WRITEFRAMEBYTE (0 );INC (FRAMEFILEPOS )END ;PROCEDURE TPCXSNP.DONECONVERT ;BEGIN IF CONVSEQ =SNPCONVERT THEN
  63. BEGIN IF COMPAREFLAG THEN PCXDECODE1.DONE ELSE PCXDECODE2.DONE ;SNIPENCODE.FLUSHBUF ;SNIPENCODE.FRAMETABLEPTR ^[
  64. FRAMETABLEELE ] := FRAMEFILEPOS ;SNIPENCODE.WRITEFRAMETABLE ;SNIPENCODE.DONE ;CONVSEQ := SNPDONE END END ;
  65. PROCEDURE TPCXSNP.CONVERTFRAME ;BEGIN IF FRAMECNT < FILELISTCOLL ^. COUNT THEN BEGIN UPDATEINFO ('Adding '+
  66. GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^));IF COMPAREFLAG THEN BEGIN PCXDECODE2.INIT (PSTRING
  67. (FILELISTCOLL ^. AT (FRAMECNT ))^);IF PCXDECODE2.READERROR =0 THEN BEGIN PCXDECODE2.DECODEFILE ;COMPAREFRAMES
  68. (PCXDECODE1.DECODEBUFPTR , PCXDECODE2.DECODEBUFPTR )END ;PCXDECODE1.DONE ;COMPAREFLAG := FALSE END ELSE
  69. BEGIN PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^);IF PCXDECODE1.READERROR =0 THEN
  70. BEGIN PCXDECODE1.DECODEFILE ;COMPAREFRAMES (PCXDECODE2.DECODEBUFPTR , PCXDECODE1.DECODEBUFPTR )END ;PCXDECODE2.DONE ;
  71. COMPAREFLAG := TRUE END ;INC (FRAMECNT )END ELSE BEGIN DONECONVERT ;UPDATEINFO ('Finished processing '+ GETFILENAMESTR
  72. (SNIPNAME ))END END ;PROCEDURE TPCXSNP.GETEVENT (VAR EVENT:TEVENT);BEGIN CASE CONVSEQ  OF SNPSCANFIRST :SCANFIRST ;
  73. SNPSCANNEXT :SCANNEXT ;SNPCREATESNIP :CREATESNIP ;SNPCONVERT :CONVERTFRAME END ;INHERITED GETEVENT(EVENT )END ;
  74. PROCEDURE TPCXSNP.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN IF EVENT.WHAT =EVCOMMAND THEN CASE EVENT.COMMAND  OF CMCANCEL
  75. :DONECONVERT ;CMOK :IF CONVSEQ =SNPWAIT THEN BEGIN CONVSEQ := SNPSCANFIRST ;CLEAREVENT (EVENT )END ELSE IF CONVSEQ <>
  76. SNPDONE THEN CLEAREVENT (EVENT )END ;INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND
  77. =CMSCROLLBARCHANGED )THEN BEGIN FRAMEDELAY := DELAYBAR ^. VALUE ;UPDATEDELAY END ;END ;END .
  78.